Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 18.09.2014, 11:40
Аспирант
Отправить личное сообщение для Lobezki Посмотреть профиль Найти все сообщения от Lobezki
 
Регистрация: 09.09.2014
Сообщений: 48

Динамическое добавление формы и ajax-запросов
Здравствуйте! У меня есть форма запроса данных из бд посредством ajax'a и выводом результатов обратно в вид. В общем ситуация такая:

Два инпута работают отлично. Пробиваем читателя - выходит инфа по нему, затем пробиваем книгу, выходит инфа по книге. Но что если, нам надо добавить еще одну книгу для выдачи или 2, 3, 10 и т.д. на одного читателя? Как видите скрипт добавления новой строки таблицы реализован (почему-то кнопка добавления при нажатии "Просмотр" здесь не отрабатывает, хотя на сайте у меня всё работает).

Но к этому неопределённому кол-ву окошек прикрутить соответствующее неопределённое кол-во ajax-запросов-выводов инфы из бд не выходит.

Через ajax-запрос я только получаю инфу по штрих-коду из бд. Последующий процесс выдачи (запись в бд и т.д.) это у меня происходит через контроллер php, далее просто сделаю перебор глобального массива и всё.


<form action="" method="post" id='givecart'>
					<form action="" method="post" id='givecart'>
					<table border="1" class="menu-main" id="table_container">
						<tr>
							<td style="text-align: center; width: 100px">Читатель</td>
							<td><input type="text" style="width: 100px" name="reader_barcode" id="reader" maxlength="8"></td>
							<td style="width: 300px">
							<span style="display: none" id="readererror" class="noreader">Читатель не найден в базе данных.</span>
													<p>Фамилия: <font style="color:green"><span id="p1"></span></font></p>
													<p>Имя: <font style="color:green"><span id="p2"></span></font></p>
													<p>Отчество: <font style="color:green"><span id="p3"></span></font></p>
							</td>
						</tr>
						<tr id="tr_image_1">
							<td style="text-align: center" style="width: 100px" >Книга</td>
						        <td id="td_title_1"><input type="text" style="width: 100px" name="book_barcode" id="book" maxlength="8">
                                                        </td>                                                                                 
							<td style="width: 300px">
							<span style="display: none" id="bookerror" class="noreader">Книга не найдена в базе данных.</span>
													<p>Фамилия: <font style="color:green"><span id="p4_1"></span></font></p>
													<p>Имя: <font style="color:green"><span id="p5_1"></span></font></p>
													<p>Название: <font style="color:green"><span id="p6_1"></span></font></p>
							</td>
						</tr>
					</table>
			                <br><input type="button" style="width: 500px; height:35px;" value="Добавить еще одну книгу" name="addanotherbook" id="add"> </br>
			                 <br><input type="submit" style="width: 500px; height:35px;" value="Выдать" name="givematerialbtn"></br>
				</form>

<!--Скрипт поиска инфы по введённому штрих-коду.!-->

<script>
var x = document.getElementById('reader');
var y = document.getElementById('book');
	x.focus();
	x.onkeyup = x.onpaste = y.onkeyup = y.onpaste = function(){
		var z = this;
		setTimeout(function(){
			z.value = z.value.replace(/[^\d]/g, '');
			if (z.value.length == 8) {
								
				var reader_barcode = $("#reader").val();
				//alert ("Данные уходят: " + reader_barcode);

				$.ajax({
				  type: "POST",
				  data: "reader_barcode=" + reader_barcode,
				  url: "ajax/finduser",
				  dataType: "json",
				  success: function(data){
					if(data)
					{
							var rese = JSON.stringify(data);
							//alert( "Прибыли данные: " + rese);
							var readerlastname = data.user_last_name;
							$("#p1").text(readerlastname);
							var readerfirstname = data.user_first_name;
							$("#p2").text(readerfirstname);
							var readerpatronymic = data.user_patronymic;
							$("#p3").text(readerpatronymic);
							//console.log (JSON.stringify(data));
					}
					
					else
					{
						$("#readererror").css('display','inline');
					}
				  }
				});
				
				y.focus();
			}

			if (y.value.length == 8) {	
				var book_barcode = $("#book").val();
				//alert ("Данные уходят: " + book_barcode);

				$.ajax({
				  type: "POST",
				  data: "book_barcode=" + book_barcode,
				  url: "ajax/findbook",
				  dataType: "json",
				  success: function(data){
					if(data)
					{
						var rese = JSON.stringify(data);
						//alert( "Прибыли данные: " + rese);
						var authorlastname = data.author_last_name;
						$("#p4_1").text(authorlastname);
						var authorfirstname = data.author_first_name;
						$("#p5_1").text(authorfirstname);
						var bookname = data.content;
						$("#p6_1").text(bookname);
						//console.log (JSON.stringify(data));
					}
					else
					{
						$("#bookerror").css('display','inline');
					}
					
				  }
				});
				return false		
			}
		}, 0);
	};
</script>

<!--Скрипт добавления новой строки в таблицу.!-->

<script>
var total = 1;
function add_new_image(){
   total++;
   $('<tr>')
   .attr('id','tr_image_'+total)
   //.css({lineHeight:'20px'})
   .append (
       $('<td style="text-align: center">')
	   .css({paddingRight:'5px',width:'100px'})
       .append(
           $('<span>Книга</span>')
       )                                                       
    )
	
	.append (
       $('<td>')
       .attr('id','td_title_'+total)
       .css({paddingRight:'5px'})
	   //.css({paddingRight:'5px',width:'300px'})
       .append(
           $('<input type="text" />')
           .css({width:'100px'})
           .attr('id','book_'+total)
           .attr('name','book_barcode_'+total)
       )                                                        
    )
	
	.append (
       $('<td>')
       .append(
          $('<p><span>Фамилия: <font style="color:green"><span id="p4_'+total+'"></span></font></span></p>')
        )
	   .append(
		  $('<p><span>Имя: <font style="color:green"><span id="p5_'+total+'"></span></font></span></p>')
		) 
	   .append(
		  $('<p><span>Название: <font style="color:green"><span id="p6_'+total+'"></span></font></span></p>')
		) 		
    )
	
    .append(
        $('<td>')
        .css({width:'20px'})
        .append(
           $('<span id="progress_'+total+'" ><a href="#" onclick="$(\'#tr_image_'+total+'\').remove();" class="ico_delete"><img src="img/false.png" alt="del" border="0"></a></span>')
         )
     )
	 
    .appendTo('#table_container')               
}
$(document).ready(function() {
	$("#add").click(add_new_image);
});
</script>
Ответить с цитированием
  #2 (permalink)  
Старый 18.09.2014, 13:34
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,277

Сообщение от Lobezki
Но к этому неопределённому кол-ву окошек прикрутить соответствующее неопределённое кол-во ajax-запросов-выводов инфы из бд не выходит.
Как вариант:
- собрать всю, нужную информацию
- отправить ее одним запросом
- полученный ответ разобрать "по окнам"
Ответить с цитированием
  #3 (permalink)  
Старый 18.09.2014, 14:00
Аспирант
Отправить личное сообщение для Lobezki Посмотреть профиль Найти все сообщения от Lobezki
 
Регистрация: 09.09.2014
Сообщений: 48

ksa, вариант интересный. Думал о похожем но в другой конструкции. И всё же возникает необходимость авто матически генерировать новую переменную (см. 75-ю строку).

...
var book_barcode = $("#book").val();

//alert ("Данные уходят: " + book_barcode);

$.ajax({
type: "POST",
data: "book_barcode=" + book_barcode,
...
Ответить с цитированием
  #4 (permalink)  
Старый 18.09.2014, 14:07
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,277

Lobezki, да там можно слать не одну, а целую кучу переменных разом!...
Ответить с цитированием
  #5 (permalink)  
Старый 18.09.2014, 14:33
Аспирант
Отправить личное сообщение для Lobezki Посмотреть профиль Найти все сообщения от Lobezki
 
Регистрация: 09.09.2014
Сообщений: 48

ksa, это понятно, вопрос в том, как реализовтаь автоматическое создание переменных?

напр. var book_barcode_1 = $("#book_1").val();

var book_barcode_+total = $("#book_"+total).val();
т.е. напр. var book_barcode_+total = $("#book_2").val();

var book_barcode_+total = $("#book_"+total).val();
т.е. напр. var book_barcode_+total = $("#book_3").val();

и т.д. Т.е. кол-во переменных по кол-ву созданных инпутов.

P.S. так новая переменная не создастся: var book_barcode_+total. Вопрос как?
Ответить с цитированием
  #6 (permalink)  
Старый 18.09.2014, 14:50
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,277

Сообщение от Lobezki
вопрос в том, как реализовтаь автоматическое создание переменных?
Вообще-то есть массивы и объекты со свойствами...
Ответить с цитированием
  #7 (permalink)  
Старый 18.09.2014, 14:53
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,277

Цитата:
data Объект, Строка
Данные, которые отсылаются на сервер. Если данные не являются строкой, то они конвертируются в строку запроса. Для запросов типа GET данные прикрепляются к URL. Для предотвращения этого, используйте опцию processData. Объект должен состоять из пар ключ/значение. Если значение представляет собой массив, то jQuery упорядочивает значения, принадлежащие одному ключу, например, {foo:["bar1", "bar2"]} превращается в ‘&foo=bar1&foo=bar2′.
http://jquery-docs.ru/Ajax/jQuery.ajax/
Читай документацию...
Ответить с цитированием
  #8 (permalink)  
Старый 18.09.2014, 15:13
Аспирант
Отправить личное сообщение для Lobezki Посмотреть профиль Найти все сообщения от Lobezki
 
Регистрация: 09.09.2014
Сообщений: 48

Короче как работать с массивом значений разобрался. Только я упустил одну деталь, то что не пойдёт мне отсылать всё одним массивом. Мне необходимо, ч.б. для каждого инпута поиск производился индивидуально.
Т.е. кликнул добавить еще одну книгу, высветилось поле ввода, ввел штрих-код, получил инфу,
опять кликнули добавить еще одну книгу, высветилось поле, ввели штрих-код, получил инфу и так ч.б. выводилась информация по стольким полям, сколько их надобавляет юзер.

Последний раз редактировалось Lobezki, 18.09.2014 в 15:48.
Ответить с цитированием
  #9 (permalink)  
Старый 18.09.2014, 15:47
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,277

Сообщение от Lobezki
а как получить массив значений из моей формы? Подскажите, пожалуйста
Циклом...
Или строку сформируй, ее и отправь...

Ты программировать-то умеешь?
Ответить с цитированием
  #10 (permalink)  
Старый 18.09.2014, 15:49
Аспирант
Отправить личное сообщение для Lobezki Посмотреть профиль Найти все сообщения от Lobezki
 
Регистрация: 09.09.2014
Сообщений: 48

ksa,
изменил последний пост.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ajax и отправка файлов с формы miker059 jQuery 5 10.01.2018 03:12
Книги по Ajax BaVa Учебные материалы 18 18.08.2013 14:05
PHP + Ajax : проблема с отправкой формы... Talker AJAX и COMET 1 04.04.2013 18:16
Стек ajax запросов Vincent AJAX и COMET 6 04.03.2013 15:08
AJAX. Добавление комментариев. Видимость формы. fanks Элементы интерфейса 3 01.12.2012 15:37